package org.tissou.client.DonneesAAfficher;

import com.google.gwt.user.client.ui.*;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import org.tissou.client.Interface.Affichable;
import org.tissou.client.Services.MonException;

import java.util.EventListener;

/**
 * Created by IntelliJ IDEA.
 * User: Claire
 * Date: 03/03/2009
 * Time: 21:12:32
 * To change this template use File | Settings | File Templates.
 */
public class Tableau extends Grid implements Affichable {
  String aAfficherSiPasDeDonnees;
  Donnees_Base donnees_origine;

  public Tableau(Donnees_Base donnees_base) {
    this(donnees_base, "Il n'y a pas de donnees a afficher");
  }

  public Tableau(Donnees_Base donnees_base, String aAfficherSiPasDeDonnees) {
    this.aAfficherSiPasDeDonnees = aAfficherSiPasDeDonnees;
    donnees_origine = donnees_base;
    ConsoliderDonnees(donnees_base, aAfficherSiPasDeDonnees);
    MiseEnPlaceStyle();
  }

  private void MiseEnPlaceStyle(){
    this.setCellSpacing(0);
    if(this.getRowCount() == 1){
      this.getCellFormatter().addStyleName(0,0,"grid_cellPasDeDonnee");
    }
    else {
      this.getRowFormatter().addStyleName(0,"grid_headings");

      for (int i = 1 ; i < this.getRowCount(); i++){
        if (i%2 == 0){
          this.getRowFormatter().addStyleName(i,"grid_lignepaire");
        }
        else{
          this.getRowFormatter().addStyleName(i,"grid_ligneimpaire");
        }
      }
      for (int i = 0 ; i<this.getRowCount(); i++){
        for (int j = 0 ; j<this.getColumnCount() ; j++){
          this.getCellFormatter().addStyleName(i, j, "grid_cell");
        }
      }
    }
  }

  public void ConsoliderDonnees(Donnees_Base donnees_base, String aAfficherSiPasDeDonnees){
    if(donnees_base.getNombreLigneDonnees() == 0){
      this.resize(1, 1);
      this.setHTML(0,0,aAfficherSiPasDeDonnees);
    }
    else {
      this.resize(donnees_base.getNombreLigneDonnees()+1, donnees_base.getNombreColonne());

      for(int i = 0 ; i<donnees_base.getNombreColonne() ; i++){
        if (donnees_base.getTetesColonnes().get(i).equals("")) {
          this.setHTML(0,i,"&nbsp;");
        } else {
          this.setText(0,i,donnees_base.getTetesColonnes().get(i));
        }
      }

      for (int j = 0;j<donnees_base.getNombreColonne();j++){
        for (int i = 0;i<donnees_base.getNombreLigneDonnees();i++){
          Widget widget_cellule = donnees_base.getElement(i,j).ConvertirEnWidget();
          if (widget_cellule instanceof HTML){
            HTML s = (HTML) widget_cellule;
            if (s.getHTML().equals("")){
              this.setHTML(i+1,j, "&nbsp;");
            }
            else {
              this.setWidget(i+1,j,widget_cellule);
            }
          }
          else{
            this.setWidget(i+1,j,widget_cellule);
          }
        }
      }
    }
  }

  public Element getElement(int row, int column){
    if (row > 0){
      return donnees_origine.getElement(row-1,column);
    }
    else {
      throw new MonException("Pas top, je ne peux pas convertir cette cellule en un element");
    }
  }

  public void afficherDans(DockPanel p, DockPanel.DockLayoutConstant position) {
    p.add(this, position);
  }

  public void afficherDans(Panel p) {
    p.add(this);
  }
}
